#!/bin/bash

#执行此脚本用户权限要求，有目录 /usr/lib/systemd/system/ 删除，创建文件权限，有执行 systemctl 执行权限

#获取此脚本所在的目录位置
CURR_DIR_PATH="$(cd "$(dirname $0)/"; pwd)"
#获取目录的名称，目录名称即程序打包的名称
CURR_APP_NAME="${CURR_DIR_PATH##*/}"
#CURR_APP_NAME="cloud-eureka-server"
#组装当前服务jar文件绝对路径
CURR_APP_NAM_PATH=$CURR_DIR_PATH/$CURR_APP_NAME".jar"
#CURR_APP_NAM_PATH="/usr/local/server/cloud-eureka-server/cloud-eureka-server.jar"

SYSTEMCTL_SERVER_STR="
[Unit]

Description=$CURR_APP_NAME

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

#这里配置只是告诉服务PidFile文件位置。在启动的shell脚本中需要创建PidFile文件，如果没找到PidFile文件，服务会启动失败。
PIDFile=$CURR_DIR_PATH/$CURR_APP_NAME".pid"

#ExecStart=$CURR_DIR_PATH/startup.sh
ExecStart=$CURR_DIR_PATH/server.sh start

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target
"
#"${SYSTEMCTL_SERVER_STR}" 用法保留字符串中的换行符
echo  "$CURR_APP_NAME SERVER INFO: ${SYSTEMCTL_SERVER_STR}"

#检查服务依赖的 server.sh 文件是否存，是否有执行权限
if [ ! -f $CURR_DIR_PATH/server.sh ]; then
    echo "$CURR_DIR_PATH/server.sh  file not found."
    exit 1
fi

if [ ! -x $CURR_DIR_PATH/server.sh ]; then
    chmod 751 $CURR_DIR_PATH/server.sh
    if [ $? -gt 0 ]; then
        #echo "$CURR_DIR_PATH/server.sh has no execute permission."
        exit 1
    fi
fi

#保存生成的服务配置文件
echo  "${SYSTEMCTL_SERVER_STR}" > $CURR_APP_NAME".service"

#指定保存服务文件位置
SERVICE_PATH="/usr/lib/systemd/system/"$CURR_APP_NAME".service"
#如果文件已存在，删除文件
if [ -f "$SERVICE_PATH" ]
then
  rm -f $SERVICE_PATH
  if [ $? -gt 0 ]; then
      echo "$SERVICE_PATH can not be deleted."
      exit 1
  fi
fi

#复制到指定服务配置目录
cp $CURR_APP_NAME".service"  $SERVICE_PATH
if [ $? -gt 0 ]; then
  echo "You can not copy $CURR_APP_NAME from $CURR_DIR_PATH/$CURR_APP_NAME to $SERVICE_PATH."
  exit 1
fi


#设置文件用户组信息
#chown root:root $SERVICE_PATH

#文件权限 读(4)、写(2)、执行(1)的权限
chmod 644 $SERVICE_PATH

# 重新加载服务定义文件（如何原来已经添加了服务,替换后需重新加载)  +++++++++++++++++++++
#systemctl reload $SERVICE_PATH

#配置开机自启动
systemctl enable $CURR_APP_NAME

#配置好后，就可以通过服务的方式启动程序
# 启动APP服务
#systemctl start $CURR_APP_NAME
# 停止APP服务
#systemctl stop $CURR_APP_NAME
# 重启APP服务
#systemctl restart $CURR_APP_NAME
#展示所有服务单元
#systemctl list-unit-files

#Linux系统下防火墙默认会屏蔽服务端口，centos 7打开端口
添加
firewall-cmd --zone=public --add-port=8080/tcp --permanent （--permanent永久生效，没有此参数重启后失效）

重新载入
firewall-cmd --reload

查看
firewall-cmd --zone= public --query-port=80/tcp

删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

查看public区域下所有已打开的端口，命令如下：
firewall-cmd --zone=public --list-ports


#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#删除一个unit没有相应的命令，通常的做法是停掉daemon，然后删除相应的配置文件。
#首先将此服务设置为开机不启动（设置成功后，会自动删除 /etc/systemd/system/multi-user.target.wants/cloud-eureka-server.service 文件）
#systemctl disable cloud-eureka-server
#删除/etc/systemd/system/ 目录下的服务配置文件
#rm  -f /etc/systemd/system/cloud-eureka-server.service 下的文件



